﻿Imports StartFrame.Web.BR.Helpers
Imports StartFrame.Web.BR

Namespace Mantenimiento.Administracion


    'Clase para la tabla Accesos
    Public Class Procuradores
        Inherits JsonAbm

        ''' <summary>
        ''' Esta clase se encarga de la administración de los usuarios que se utilizan en el sistema.
        ''' </summary>
        Sub New()
            MyBase.New(Operador, Password, "XRUsuario", "NuevoSitio.dbo.Accesos", "Apellido")
            MyBase.lnk_nombreOperador = Common.Env.Operador
        End Sub

#Region "eventos"
        Private Sub Procuradores_Eliminando(ByRef cancela As Boolean, ByRef row As System.Data.DataRow) Handles Me.Eliminando
            ' Obtengo las recorridas
            Dim recorridas As String = ObtenerAccesoRecorridas(row("id", DataRowVersion.Original))
            ' Chequeo si tengo recorridas, si las tengo deshabilito el usuario nada mas.
            If Not String.IsNullOrWhiteSpace(recorridas) Then
                cancela = True
                row.RejectChanges()
                row("habilitado") = False
                ActualizarDatos(row.Table.DataSet)
            Else
                Dim mGrupo As New MiembrosGrupo
                Dim ds As DataSet = mGrupo.Buscar(String.Format("cd_operador = '{0}'", row("cd_operador", DataRowVersion.Original)))
                If ds.Tables.Count > 0 AndAlso ds.Tables(0).Rows.Count > 0 Then
                    For Each dr As DataRow In ds.Tables(0).Rows
                        dr.Delete()
                    Next
                    mGrupo.ActualizarDatos(ds)
                End If
                Dim brUsuario As New BR.Conexiones.Mantenimiento.Administracion.Seguridad.Usuario
                ds = brUsuario.Buscar(String.Format("cd_operador = '{0}'", row("cd_operador", DataRowVersion.Original)))
                If ds.Tables.Count > 0 AndAlso ds.Tables(0).Rows.Count > 0 Then
                    For Each dr As DataRow In ds.Tables(0).Rows
                        dr.Delete()
                    Next
                    brUsuario.ActualizarDatos(ds)
                End If
            End If
        End Sub

        Private Sub Procuradores_Insertado(ByRef row As System.Data.DataRow) Handles Me.Insertado
            ' Creo el objeto Operadores de Startframe para poder crear los operadores del sistema.
            Dim opr As New StartFrame.BR.Utilitarios.Operadores
            Dim dsOpr As System.Data.DataSet = opr.getDataSet()
            Dim drOpr As System.Data.DataRow = dsOpr.Tables(0).NewRow() 'Creo la fila del nuevo operador.
            Dim cdOperador As String = row("cd_operador")

            drOpr("cd_operador") = cdOperador
            drOpr("nm_operador") = String.Format("{0} {1}", row("nombre"), row("apellido"))
            drOpr("nu_interno_telefono") = 0
            drOpr("st_bloqueado") = False
            drOpr("cd_barra_herr") = "ESTANDAR"
            drOpr("st_tracking") = False
            drOpr("st_cambiar_clave") = False
            drOpr("va_clave_acceso") = StartFrame.SystemFunctions.Strings.EncryptString(row("clave"), Common.Env.KEY, SystemFunctions.Strings.Accion.ENCRYPT)
            drOpr("fe_alta") = DateTime.Now
            drOpr("cd_tema") = "fwrk01"
            drOpr("st_chat") = True

            dsOpr.Tables(0).Rows.Add(drOpr) ' Agrego el nuevo operador al dataset.
            opr.ActualizarDatos(dsOpr) ' Impacto el dataset en la base de datos.

            ' Creo un objeto del tipo Miembros grupo para asignar el nuevo usuario al grupo Procuradores.
            Dim mGrupo As New MiembrosGrupo
            dsOpr = mGrupo.getDataSet()
            drOpr = dsOpr.Tables(0).NewRow()
            drOpr("cd_grupo_operadores") = "PROC"
            drOpr("cd_operador") = cdOperador
            dsOpr.Tables(0).Rows.Add(drOpr)
            ' Impacto la asociacion
            mGrupo.ActualizarDatos(dsOpr)
        End Sub

        Private Sub Procuradores_Modificando(ByRef cancela As Boolean, ByRef row As System.Data.DataRow) Handles Me.Modificando
            ' Obtengo en nombre del operador para poder identificarlo en Startframe
            Dim cdOpr As String = row("cd_operador")
            Dim opr As New StartFrame.BR.Utilitarios.Operadores
            Dim ds As DataSet = opr.Buscar(String.Format("cd_operador = '{0}'", cdOpr))

            ' Asigno la clave cambiada, aunque no haya cambiado, el framework evalua si cambio o no.
            ds.Tables(0).Rows(0)("va_clave_acceso") = StartFrame.SystemFunctions.Strings.EncryptString(row("clave"), Common.Env.KEY, SystemFunctions.Strings.Accion.ENCRYPT)

            ' Chequeo si el campo  habilitado fue modificado
            If row("habilitado", DataRowVersion.Current) <> row("habilitado", DataRowVersion.Original) Then
                ' Comparo para saber si paso de habilitado a deshabilitado para guardar la fecha de baja.
                If row("habilitado", DataRowVersion.Original) = True AndAlso row("habilitado", DataRowVersion.Current) = False Then
                    row("feBaja") = DateTime.Now
                End If

                ' Cambio el campo bloqueado en el sistema Startframe del usuario modificado
                ds.Tables(0).Rows(0)("st_bloqueado") = Not row("habilitado", DataRowVersion.Current)
            End If
            opr.ActualizarDatos(ds)
        End Sub

#End Region

#Region "metodos"
        Public Sub ActualizarRecorridos(id As String, Recorridas As String)
            Dim param As New ArrayList
            param.Add(id)
            param.Add(Recorridas)
            DA.Sql.ExecSP(Common.Env.ConnectionString, "wp_ActualizarRecorridas", param)
        End Sub

        Public Function ObtenerAccesoRecorridas(id As String) As String
            Dim retValue As String = ""
            For Each dr As DataRow In DA.Sql.Select(Common.Env.GetConnectionString("cnnNuevoSitioKey"), "*", "acceso_recorrida", "idAcceso = " & id).Tables(0).Rows
                retValue &= dr("idRecorrida").ToString() & ", "
            Next
            If String.IsNullOrWhiteSpace(retValue) Then Return String.Empty
            Return retValue.TrimEnd(" ").TrimEnd(",")
        End Function
#End Region

    End Class
End Namespace